using System;
using System.Collections.Generic;

struct Transform
{
    public Vec3 position;
    public Vec3 rotation;
    public Vec3 scale;

    public Transform(Vec3 p, Vec3 r, Vec3 s)
    {
        this.position=p;
        this.rotation=r;
        this.scale=s;
    }
    public Transform(Vec3 p)
    {
        this.position=p;
        this.rotation=new Vec3(0,0,0);
        this.scale=new Vec3(1,1,1);
    }
};

struct Rigidbody
{
    float mass;

};

public enum Kind
{
    _chick_,
    _duck_

}
public enum Type
{
        _debug_ = 0,
        _info_ = 1,
        _warn_ = 2,
        _error_ = 3
}

    public class TextLine
    {


        public Type m_Type;
        public string m_Text;
        
        public TextLine()
        {
        }

        public TextLine(Type type, string text)
        {
            m_Type = type;
            m_Text = text;
        }
    }

public class Debug{
    public Debug(){}
    public void info(string text)
    {
        m_Texts.Add(new TextLine(Type._debug_,text));
    }
    
    public void error(string text)
    {
        m_Texts.Add(new TextLine(Type._debug_,text));
    }
    
    public void warn(string text){
        m_Texts.Add(new TextLine(Type._debug_,text));
    }
    
    public void debug(string text){
        m_Texts.Add(new TextLine(Type._debug_,text));
    }
    List<TextLine> m_Texts;


}

public class ExampleProgram
{
    public Debug debug;

    public ExampleProgram()
    {
        debug = new Debug();
    }

    public static void SayHello(string name)
    {
        Console.WriteLine("Hello "+name);
    }

    public static int Add(int a, int b)
    {
        return a + b;
    }
    public static int Minus(int a, int b)
    {
        return a-b;
    }
    public static string Sub(string a, string b)
    {
        return a+b;
    }
    public static float dot(float a, float b)
    {
        return a*b;
    }
    public void test1(){

        debug.info("execute the test function");
    }

     float dot2(float a, float b){
        return a*b;
    }
    void OnStart()
    {
        debug.info("On start");
    }

    void OnUpdate()
    {
        debug.info("on update");
    }
    
    void OnDestroy()
    {
        debug.info("on destroy");
    }

    bool Same(string s1, string s2)
    {
        return s1==s2;
    }

};
